const Base = require('../base.js');

module.exports = class extends Base {
  /**
   * @api {POST} /holiday 添加节假日
   * @apiName add_holiday
   * @apiGroup holiday
   * @apiParam  {Number} type 类型 0:工作日 1:节假日
   * @apiParam  {Number} legal 法定假日 0:否 1:是
   * @apiParam  {String} note 备注
   * @apiParam  {Number} startDate 开始时间（UNIX时间戳）
   * @apiParam  {Number} endDate 结束时间（UNIX时间戳）
   * @apiSuccess (201) {Object} res 新增成功的节假日
   * @apiVersion  1.0.0
   */
  async addAction() {
    const params = {
      type: this.post('type'),
      legal: this.post('legal'),
      note: this.post('note'),
      startDate: this.post('startDate'),
      endDate: this.post('endDate')
    };
    const res = await this.model('holiday', 'mysqlLocal').add(params);
    if (res) {
      params.id = res;
      this.status = 201;
      this.success(params, 'add ok');
    } else {
      this.fail(-1, 'add fail:' + res);
    }
  }

  /**
   * @api {PUT} /holiday/:id 修改节假日
   * @apiName edit_holiday
   * @apiGroup holiday
   * @apiParam  {Number} id 节假日唯一id标识
   * @apiParam  {Number} type 类型 0:工作日 1:节假日
   * @apiParam  {Number} legal 法定假日 0:否 1:是
   * @apiParam  {String} note 备注
   * @apiParam  {Number} startDate 开始时间（UNIX时间戳）
   * @apiParam  {Number} endDate 结束时间（UNIX时间戳）
   * @apiSuccess (201) {Object} res 修改后的完成对象
   * @apiVersion  1.0.0
   */
  async editAction() {
    const params = {
      type: this.post('type'),
      legal: this.post('legal'),
      note: this.post('note'),
      startDate: this.post('startDate'),
      endDate: this.post('endDate')
    };
    const res = await this.model('holiday', 'mysqlLocal').where({id: this.get('id')}).update(params);
    params.id = this.get('id');
    if (res) {
      this.status = 201;
      this.success(params, 'update ok');
    } else {
      this.fail(-1, 'update fail:' + res);
    }
  }

  /**
   * @api {DELETE} /holiday/:id 删除节假日
   * @apiName delete_holiday
   * @apiGroup holiday
   * @apiParam  {Number} id 节假日唯一id标识
   * @apiSuccess (204) {String} null 删除成功返回空文档
   * @apiVersion  1.0.0
   */
  async delAction() {
    const ids = this.get('id').split(',');
    const res = await this.model('holiday', 'mysqlLocal').where({id: ['IN', ids]}).delete();
    if (res) {
      this.status = 204;
      this.success(res, 'delete ok');
    } else {
      this.fail(-1, 'delete fail:' + res);
    }
  }

  /**
   * @api {GET} /holiday 获取节假日列表
   * @apiName get_holiday
   * @apiGroup holiday
   * @apiSuccess (200) {Object[]} res 节假日列表
   * @apiVersion  1.0.0
   */
  async listAction() {
    const res = await this.model('holiday', 'mysqlLocal').select();
    if (res) {
      this.success(res, 'list ok');
    } else {
      this.fail(-1, 'list fail:' + res);
    }
  }
};
